package com.Humanities.auth.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.stereotype.Component;

/**
 * @description 自定义DaoAuthenticationProvider
 * @author Mr.M
 * @date 2022/9/29 10:31
 * @version 1.0
 */
@Slf4j // 注解，提供日志功能，方便记录日志信息
@Component // 注解，标识此类为Spring组件，便于Spring容器管理
public class DaoAuthenticationProviderCustom extends DaoAuthenticationProvider {

    //类的作用: DaoAuthenticationProviderCustom 是一个自定义的 DaoAuthenticationProvider，用于扩展或修改 Spring Security 的认证逻辑。
    // 通过重写 additionalAuthenticationChecks 方法，
    // 屏蔽了默认的密码校验逻辑，适用于需要自定义认证方式的场景，例如基于其他参数（如验证码、短信等）的认证。

    @Autowired // 注解，自动注入UserDetailsService的实现类
    public void setUserDetailsService(UserDetailsService userDetailsService) {
        // 调用父类的setUserDetailsService方法，将UserDetailsService注入到父类中
        super.setUserDetailsService(userDetailsService);
    }

    // 重写additionalAuthenticationChecks方法，屏蔽密码对比逻辑
    // 此方法在Spring Security的认证过程中用于校验用户的密码
    protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
        // 此处未实现任何逻辑，意味着跳过了密码校验
    }

}